iT邦幫忙

2024 iThome 鐵人賽

DAY 18
0
佛心分享-IT 人自學之術

後端小白自學 Laravel系列 第 18

第 18 天:驗證與自定義規則

  • 分享至 

  • xImage
  •  

今天這篇是把第 9 天:表單處理與請求的自定義提出更細部的說明,尤其是在定義自訂驗證邏輯這部分。

文件:表单验证
內建驗證規則: 使用 Laravel 的內建規則進行常見資料驗證。
自訂驗證規則: 建立自訂規則以滿足特定需求。
表單請求: 使用表單請求類別封裝驗證邏輯,提升程式碼的整潔性和可維護性。

Laravel 內置驗證規則的使用


Laravel 提供了許多內建的驗證規則,可以在表單提交時進行資料驗證,當然也可以在控制器方法中使用這些規則來確保資料的有效性。
範例 - 控制器中的驗證

use Illuminate\Http\Request;
use Illuminate\Support\Facades\Validator;

public function store(Request $request)
{
    $validator = Validator::make($request->all(), [
        'name' => 'required|string|max:255',
        'email' => 'required|email|unique:users,email',
        'password' => 'required|confirmed|min:8',
    ]);

    if ($validator->fails()) {
        return redirect()->back()->withErrors($validator)->withInput();
    }

    // 驗證通過,繼續處理數據
}

創建自定義驗證規則


有時內建的驗證規則可能不滿足需求,這時可以建立自訂驗證規則。
step 1 - 建立自訂規則
用指令 php artisan make:rule CustomRule 建立自訂規則類

step 2 - 定義自訂驗證邏輯
app/Rules 目錄下產生一個新的規則類別檔案 app/Rules/CustomRule.php
編輯該文件以定義自訂驗證邏輯:

namespace App\Rules;

use Illuminate\Contracts\Validation\Rule;

class CustomRule implements Rule
{
    public function passes($attribute, $value)
    {
        // 自訂驗證邏輯
        return $value === 'special';
    }

    public function message()
    {
        // 自訂錯誤訊息
        return 'The :attribute must be "special".';
    }
}

step 3 - 在控制器中使用自訂規則

use App\Rules\CustomRule;

public function store(Request $request)
{
    $validator = Validator::make($request->all(), [
        'attribute' => ['required', new CustomRule()],
    ]);

    if ($validator->fails()) {
        return redirect()->back()->withErrors($validator)->withInput();
    }

    // 驗證通過,繼續處理數據
}

使用表單請求進行複雜驗證


表單請求(Form Request)是 Laravel 提供的一種更整潔的驗證處理方法,可以將驗證邏輯封裝在單獨的請求類別中。
step 1 - 建立表單請求
用指令 php artisan make:request StoreUserRequest 建立表單請求

step 2 - 定義自訂驗證規則和授權邏輯
app/Http/Requests 目錄下產生一個新的請求類別檔案 app/Http/Requests/StoreUserRequest.php
編輯該文件以定義驗證規則和授權邏輯:

namespace App\Http\Requests;

use Illuminate\Foundation\Http\FormRequest;

class StoreUserRequest extends FormRequest
{
    public function authorize()
    {
        // 是否授權該請求
        return true;
    }

    public function rules()
    {
        return [
            'name' => 'required|string|max:255',
            'email' => 'required|email|unique:users,email',
            'password' => 'required|confirmed|min:8',
        ];
    }

    public function messages()
    {
        return [
            'name.required' => 'The name field is required.',
            'email.email' => 'Please provide a valid email address.',
            'password.confirmed' => 'Passwords do not match.',
        ];
    }
}

step 3 - 在控制器中使用表單請求
將表單請求類別作為控制器方法的參數:

use App\Http\Requests\StoreUserRequest;

public function store(StoreUserRequest $request)
{
    // 驗證通過,繼續處理數據
}

上一篇
第 17 天:緩存 Cache
下一篇
第 19 天:事件與監聽器
系列文
後端小白自學 Laravel30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言